package main

import (
	"fmt"
	"log"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

const dsn = "gva:gvagva@tcp(172.1.4.155:3306)/gormtest?charset=utf8mb4&parseTime=True&loc=Local"

type UserTop struct {
	gorm.Model
	Name string `gorm:"unique"`
	Age  int8
	Hit  int64
}

func main() {
	fmt.Println("Gorm 数据库操作")
	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("连接数据库失败")
	}
	db.AutoMigrate(&UserTop{})

	// 增：插入一条新记录
	user := UserTop{Name: "cjj", Age: 20, Hit: 99999999}
	result := db.Create(&user)
	//if result.Error != nil {
	//	log.Fatalf("插入数据时出错: %v", result.Error)
	//}
	//fmt.Println("插入成功，ID 为:", user.ID)

	// 查：根据 ID 查询记录
	var foundUser UserTop
	err = db.First(&foundUser, user.ID).Error
	if err != nil {
		log.Fatalf("查询数据时出错: %v", err)
	}
	fmt.Println("查询结果:", foundUser)

	// 改：修改 Hit 字段
	newHit := int64(1111111)
	result = db.Model(&foundUser).Update("Hit", newHit)
	if result.Error != nil {
		log.Fatalf("更新 Hit 字段时出错: %v", result.Error)
	}
	fmt.Println("Hit 字段更新成功，新的 Hit 值为:", newHit)

	// 再次查询以验证更新结果
	err = db.First(&foundUser, user.ID).Error
	if err != nil {
		log.Fatalf("查询更新后的数据时出错: %v", err)
	}
	fmt.Println("更新后的查询结果:", foundUser)

	//// 删：根据 ID 删除记录
	//result = db.Delete(&UserTop{}, user.ID)
	//if result.Error != nil {
	//	log.Fatalf("删除数据时出错: %v", result.Error)
	//}
	//fmt.Println("删除成功，受影响的行数:", result.RowsAffected)

	// 再次查询验证是否删除
	var deletedUser UserTop
	err = db.First(&deletedUser, user.ID).Error
	if err == nil {
		log.Fatalf("删除失败，仍能查询到记录")
	} else if err == gorm.ErrRecordNotFound {
		fmt.Println("记录已成功删除")
	} else {
		log.Fatalf("查询删除后的数据时出错: %v", err)
	}
}
